#!/usr/bin/env python
#encoding latin1

import sys

from cargar_mapa import *
from cargar_fabricas import *
from cargar_juguetes import *

from parser_tp3 import *

from grafo import *
from camino_minimo import *
from conferencista import *
from mochila import *
from comandos import *

def main():
	if len(sys.argv) < 6:
		print("Uso:\n\t<capacidad> <id_esquina_polo_norte> <archivo_fabricas> <archivo_juguetes> <archivo_mapa>")
		return

	capacidad = int(sys.argv[1])
	id_esquina_polo_norte = int(sys.argv[2])
	archivo_fabricas = sys.argv[3]
	archivo_juguetes = sys.argv[4]
	archivo_mapa = sys.argv[5]

	sys.stderr.write("Cargando mapa\n")
	mapa = cargar_mapa(archivo_mapa)
	sys.stderr.write("Cargando fabricas\n")
	fabricas = cargar_fabricas(archivo_fabricas)
	sys.stderr.write("Cargando juguetes\n")
	juguetes = cargar_juguetes(archivo_juguetes)

	sys.stderr.write("Generando grafo\n")
	grafo = generar_grafo(mapa)

	sys.stderr.write("Generando solucion de recorridos\n")
	camino = camino_min(grafo,id_esquina_polo_norte)

	sys.stderr.write("Generando tabla de horarios\n")
	tabla_horarios = generar_tabla_horarios(fabricas)

	sys.stderr.write("Generando solucion de horarios\n")
	solucion_conferencista = resolver_horarios(tabla_horarios)

	solucion_mochila = dict()

	solucion_camino = dict()

	sys.stderr.write("Generando solucion de mochila y caminos\n")
	for f in solucion_conferencista:
		inventario = list()
		for j in juguetes[f].keys():
			juguete = juguetes[f][j]
			inventario.append(item_inventario(j,juguete[0],juguete[1]))
		solucion_mochila[f] = resolver_mochila_dinamica(inventario,capacidad)
		solucion_camino[f] = Generar_recorrido(camino,(fabricas[f])[0])

	sys.stderr.write("Fin de procesamiento de datos\n")

	entorno = dict(mapa = mapa, fabricas = fabricas, juguetes = juguetes, camino = camino, capacidad = capacidad,
solucion_camino = solucion_camino, solucion_conferencista = solucion_conferencista, solucion_mochila = solucion_mochila)

	lista_comandos = dict(listar_fabricas = listar_fabricas, valuar_juguetes = valuar_juguetes,
valuar_juguetes_total = valuar_juguetes_total, camino_optimo = camino_optimo, listar_juguetes = listar_juguetes)

	sys.stderr.write("Esperando ordenes\n")
	while True:
		try:
			linea = input()
		except EOFError:
			break
		parser(entorno, lista_comandos, linea)

main()
